// RAP [rh] Keys completely disabled as not implemented in RWT ///******************************************************************************* // * Copyright (c) 2007, 2008 IBM Corporation and others. // * All rights reserved. This program and the accompanying materials // * are made available under the terms of the Eclipse Public License v1.0 // * which accompanies this distribution, and is available at // * http://www.eclipse.org/legal/epl-v10.html // * // * Contributors: // * IBM Corporation - initial API and implementation // *******************************************************************************/ // //package org.eclipse.ui.internal.keys.model; // //import java.util.ArrayList; //import java.util.Collection; //import java.util.HashMap; //import java.util.HashSet; //import java.util.Iterator; //import java.util.Map; //import java.util.Set; // //import org.eclipse.core.commands.Command; //import org.eclipse.core.commands.ParameterizedCommand; //import org.eclipse.core.commands.common.NotDefinedException; //import org.eclipse.jface.bindings.Binding; //import org.eclipse.jface.bindings.BindingManager; //import org.eclipse.jface.bindings.TriggerSequence; //import org.eclipse.jface.bindings.keys.KeyBinding; //import org.eclipse.jface.bindings.keys.KeySequence; //import org.eclipse.ui.commands.ICommandService; //import org.eclipse.ui.internal.util.Util; //import org.eclipse.ui.services.IServiceLocator; // ///** // * @since 3.4 // * // */ //public class BindingModel extends CommonModel { // public static final String PROP_BINDING_ADD = "bindingAdd"; //$NON-NLS-1$ // public static final String PROP_BINDING_ELEMENT_MAP = "bindingElementMap"; //$NON-NLS-1$ // public static final String PROP_BINDING_FILTER = "bindingFilter"; //$NON-NLS-1$ // public static final String PROP_BINDING_REMOVE = "bindingRemove"; //$NON-NLS-1$ // public static final String PROP_BINDINGS = "bindings"; //$NON-NLS-1$ // public static final String PROP_CONFLICT_ELEMENT_MAP = "bindingConfictMap"; //$NON-NLS-1$ // // final static boolean deletes(final Binding del, final Binding binding) { // boolean deletes = true; // deletes &= Util.equals(del.getContextId(), binding.getContextId()); // deletes &= Util.equals(del.getTriggerSequence(), binding // .getTriggerSequence()); // if (del.getLocale() != null) { // deletes &= Util.equals(del.getLocale(), binding.getLocale()); // } // if (del.getPlatform() != null) { // deletes &= Util.equals(del.getPlatform(), binding.getPlatform()); // } // deletes &= (binding.getType() == Binding.SYSTEM); // deletes &= Util.equals(del.getParameterizedCommand(), null); // // return deletes; // } // // private Collection allParameterizedCommands; // private BindingManager bindingManager; // // /** // * Holds all the {@link BindingElement} objects. // */ // private HashSet bindingElements; // // /** // * A map of {@link Binding} objects to {@link BindingElement} objects. // */ // private Map bindingToElement; // // /** // * A map of {@link ParameterizedCommand} objects to {@link BindingElement} // * objects. // */ // private Map commandToElement; // // /** // * @param kc // */ // public BindingModel(KeyController kc) { // super(kc); // } // // /** // * Makes a copy of the selected element. // * // */ // public void copy() { // BindingElement element = (BindingElement) getSelectedElement(); // copy(element); // } // // /** // * Makes a copy of the // * // * @param element // */ // public void copy(BindingElement element) { // if (element == null || !(element.getModelObject() instanceof Binding)) { // return; // } // BindingElement be = new BindingElement(controller); // ParameterizedCommand parameterizedCommand = ((Binding) element // .getModelObject()).getParameterizedCommand(); // be.init(parameterizedCommand); // be.setParent(this); // bindingElements.add(be); // commandToElement.put(parameterizedCommand.getId(), be); // controller.firePropertyChange(this, PROP_BINDING_ADD, null, be); // setSelectedElement(be); // } // // /** // * @return Returns the bindings. // */ // public HashSet getBindings() { // return bindingElements; // } // // /** // * @return Returns the bindingToElement. // */ // public Map getBindingToElement() { // return bindingToElement; // } // // /** // * @return Returns the commandToElement. // */ // public Map getCommandToElement() { // return commandToElement; // } // // /** // * The initialization only. // * // * @param locator // * @param manager // * @param model // */ // public void init(IServiceLocator locator, BindingManager manager, // ContextModel model) { // Set cmdsForBindings = new HashSet(); // bindingToElement = new HashMap(); // commandToElement = new HashMap(); // // bindingElements = new HashSet(); // bindingManager = manager; // // Iterator i = manager.getActiveBindingsDisregardingContextFlat() // .iterator(); // while (i.hasNext()) { // Binding b = (Binding) i.next(); // BindingElement be = new BindingElement(controller); // be.init(b, model); // be.setParent(this); // bindingElements.add(be); // bindingToElement.put(b, be); // cmdsForBindings.add(b.getParameterizedCommand()); // } // // ICommandService commandService = (ICommandService) locator // .getService(ICommandService.class); // final Collection commandIds = commandService.getDefinedCommandIds(); // allParameterizedCommands = new HashSet(); // final Iterator commandIdItr = commandIds.iterator(); // while (commandIdItr.hasNext()) { // final String currentCommandId = (String) commandIdItr.next(); // final Command currentCommand = commandService // .getCommand(currentCommandId); // try { // allParameterizedCommands.addAll(ParameterizedCommand // .generateCombinations(currentCommand)); // } catch (final NotDefinedException e) { // // It is safe to just ignore undefined commands. // } // } // // i = allParameterizedCommands.iterator(); // while (i.hasNext()) { // ParameterizedCommand cmd = (ParameterizedCommand) i.next(); // if (!cmdsForBindings.contains(cmd)) { // BindingElement be = new BindingElement(controller); // be.init(cmd); // be.setParent(this); // bindingElements.add(be); // commandToElement.put(cmd.getId(), be); // } // } // } // // /** // * Refreshes the binding model to be in sync with the {@link BindingManager}. // * // * @param contextModel // */ // public void refresh(ContextModel contextModel) { // Set cmdsForBindings = new HashSet(); // Collection activeManagerBindings = bindingManager // .getActiveBindingsDisregardingContextFlat(); // // // add any bindings that we don't already have. // Iterator i = activeManagerBindings.iterator(); // while (i.hasNext()) { // KeyBinding b = (KeyBinding) i.next(); // ParameterizedCommand parameterizedCommand = b // .getParameterizedCommand(); // cmdsForBindings.add(parameterizedCommand); // if (!bindingToElement.containsKey(b)) { // BindingElement be = new BindingElement(controller); // be.init(b, contextModel); // be.setParent(this); // bindingElements.add(be); // bindingToElement.put(b, be); // controller.firePropertyChange(this, PROP_BINDING_ADD, null, be); // // String idKey = parameterizedCommand.getId(); // if (commandToElement.containsKey(idKey) // && be.getUserDelta().intValue() == Binding.SYSTEM) { // Object remove = commandToElement.remove(idKey); // bindingElements.remove(remove); // controller.firePropertyChange(this, PROP_BINDING_REMOVE, // null, remove); // } // } // } // // // remove bindings that shouldn't be there // i = bindingElements.iterator(); // while (i.hasNext()) { // BindingElement be = (BindingElement) i.next(); // Object obj = be.getModelObject(); // if (obj instanceof Binding) { // Binding b = (Binding) obj; // if (!activeManagerBindings.contains(b)) { // be.fill(b.getParameterizedCommand()); // bindingToElement.remove(b); // i.remove(); // controller.firePropertyChange(this, PROP_BINDING_REMOVE, // null, be); // } // } else { // cmdsForBindings.add(obj); // } // } // // // If we removed the last binding for a parameterized command, // // put back the CMD // i = allParameterizedCommands.iterator(); // while (i.hasNext()) { // ParameterizedCommand cmd = (ParameterizedCommand) i.next(); // if (!cmdsForBindings.contains(cmd)) { // BindingElement be = new BindingElement(controller); // be.init(cmd); // be.setParent(this); // bindingElements.add(be); // commandToElement.put(cmd.getId(), be); // controller.firePropertyChange(this, PROP_BINDING_ADD, null, be); // } // } // } // // /** // * Removes the selected element's binding // * // */ // public void remove() { // BindingElement element = (BindingElement) getSelectedElement(); // remove(element); // } // // /** // * Removes the <code>bindingElement</code> binding. // * // * @param bindingElement // */ // public void remove(BindingElement bindingElement) { // if (bindingElement == null // || !(bindingElement.getModelObject() instanceof Binding)) { // return; // } // KeyBinding keyBinding = (KeyBinding) bindingElement.getModelObject(); // if (keyBinding.getType() == Binding.USER) { // bindingManager.removeBinding(keyBinding); // } else { // KeySequence keySequence = keyBinding.getKeySequence(); // // // Add the delete binding // bindingManager.addBinding(new KeyBinding(keySequence, null, // keyBinding.getSchemeId(), keyBinding.getContextId(), null, // null, null, Binding.USER)); // // // Unbind any conflicts affected by the delete binding // ConflictModel conflictModel = controller.getConflictModel(); // conflictModel.updateConflictsFor(bindingElement); // Collection conflictsList = conflictModel.getConflicts(); // if (conflictsList != null) { // Object[] conflicts = conflictsList.toArray(); // for (int i = 0; i < conflicts.length; i++) { // BindingElement be = (BindingElement) conflicts[i]; // if (be == bindingElement) { // continue; // } // Object modelObject = be.getModelObject(); // if (modelObject instanceof Binding) { // Binding binding = (Binding) modelObject; // if (binding.getType() != Binding.SYSTEM) { // continue; // } // ParameterizedCommand pCommand = binding // .getParameterizedCommand(); // be.fill(pCommand); // commandToElement.put(pCommand.getId(), be); // } // } // } // } // ParameterizedCommand parameterizedCommand = keyBinding // .getParameterizedCommand(); // bindingElement.fill(parameterizedCommand); // commandToElement.put(parameterizedCommand.getId(), bindingElement); // controller.firePropertyChange(this, PROP_CONFLICT_ELEMENT_MAP, null, // bindingElement); // } // // /** // * Restores the specified BindingElement. A refresh should be performed // * afterwards. The refresh may be done after several elements have been // * restored. // * // * @param element // */ // public void restoreBinding(BindingElement element) { // if (element == null) { // return; // } // // Object modelObject = element.getModelObject(); // // ParameterizedCommand cmd = null; // if (modelObject instanceof ParameterizedCommand) { // cmd = (ParameterizedCommand) modelObject; // TriggerSequence trigger = bindingManager // .getBestActiveBindingFor(cmd.getId()); // Binding binding = bindingManager.getPerfectMatch(trigger); // if (binding != null && binding.getType() == Binding.SYSTEM) { // return; // } // } else if (modelObject instanceof KeyBinding) { // cmd = ((KeyBinding) modelObject).getParameterizedCommand(); // } // // // Remove any USER bindings // Binding[] managerBindings = bindingManager.getBindings(); // ArrayList systemBindings = new ArrayList(); // ArrayList removalBindings = new ArrayList(); // for (int i = 0; i < managerBindings.length; i++) { // if (managerBindings[i].getParameterizedCommand() == null) { // removalBindings.add(managerBindings[i]); // } else if (managerBindings[i].getParameterizedCommand().equals(cmd)) { // if (managerBindings[i].getType() == Binding.USER) { // bindingManager.removeBinding(managerBindings[i]); // } else if (managerBindings[i].getType() == Binding.SYSTEM) { // systemBindings.add(managerBindings[i]); // } // } // } // // // Clear the USER bindings for parameterized commands // Iterator i = systemBindings.iterator(); // while (i.hasNext()) { // Binding sys = (Binding) i.next(); // Iterator j = removalBindings.iterator(); // while (j.hasNext()) { // Binding del = (Binding) j.next(); // if (deletes(del, sys) && del.getType() == Binding.USER) { // bindingManager.removeBinding(del); // } // } // } // // setSelectedElement(null); // // bindingElements.remove(element); // bindingToElement.remove(modelObject); // commandToElement.remove(modelObject); // controller.firePropertyChange(this, PROP_BINDING_REMOVE, null, element); // } // // /** // * Restores the currently selected binding. // * // * @param contextModel // */ // public void restoreBinding(ContextModel contextModel) { // BindingElement element = (BindingElement) getSelectedElement(); // // if (element == null) { // return; // } // // restoreBinding(element); // refresh(contextModel); // // Object obj = element.getModelObject(); // ParameterizedCommand cmd = null; // if (obj instanceof ParameterizedCommand) { // cmd = (ParameterizedCommand) obj; // } else if (obj instanceof KeyBinding) { // cmd = ((KeyBinding) obj).getParameterizedCommand(); // } // // boolean done = false; // Iterator i = bindingElements.iterator(); // // Reselects the command // while (i.hasNext() && !done) { // BindingElement be = (BindingElement) i.next(); // obj = be.getModelObject(); // ParameterizedCommand pcmd = null; // if (obj instanceof ParameterizedCommand) { // pcmd = (ParameterizedCommand) obj; // } else if (obj instanceof KeyBinding) { // pcmd = ((KeyBinding) obj).getParameterizedCommand(); // } // if (cmd.equals(pcmd)) { // done = true; // setSelectedElement(be); // } // } // } // // /** // * @param bindings // * The bindings to set. // */ // public void setBindings(HashSet bindings) { // HashSet old = this.bindingElements; // this.bindingElements = bindings; // controller.firePropertyChange(this, PROP_BINDINGS, old, bindings); // } // // /** // * @param bindingToElement // * The bindingToElement to set. // */ // public void setBindingToElement(Map bindingToElement) { // Map old = this.bindingToElement; // this.bindingToElement = bindingToElement; // controller.firePropertyChange(this, PROP_BINDING_ELEMENT_MAP, old, // bindingToElement); // } //}